home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 20 / Cream of the Crop 20 (Terry Blount) (1996).iso / doom / cddk9605.zip / HEADERS.ARJ / VIDEO.INT < prev    next >
Text File  |  1996-05-17  |  16KB  |  413 lines

  1.  
  2. { ───────────────────────────────────────────────────────────────────────── }
  3. {  Name        : VIDEO.PAS                                                  }
  4. {  Description : A wide selection of video routines                         }
  5. { ───────────────────────────────────────────────────────────────────────── }
  6.  
  7. UNIT Video;
  8.  
  9. {$B-} { . . . . . . . . . . . . . . . . . . . . Shortcut boolean evaluation }
  10. {$F+} { . . . . . . . . . . . . . . . . . . . .  Force far calls for safety }
  11. {$I-} { . . . . . . . . . . . . . . . . . . . Disable input/output checking }
  12. {$O+} { . . . . . . . . . . . . . . . . . . Allow this unit to be overlayed }
  13. {$Q-} { . . . . . . . . . . . . . .  Do not generate overflow-checking code }
  14. {$R-} { . . . . . . . . . . . . . . . . Do not generate range-checking code }
  15. {$S-} { . . . . . . . . . . . . . . . . Do not generate stack-checking code }
  16. {$X+} { . . . . . . . . . . . Extended syntax for pChars and function calls }
  17.  
  18. INTERFACE
  19.  
  20. CONST
  21.  
  22.   { ANSI Constants }
  23.  
  24.   ANSI_ClrEOL = #27'[K';
  25.   ANSI_ClrScr = #27'[2J';
  26.  
  27.   ANSICmdChrs = ['A'..'D','f','H','h','J','K','l','m','p','s','u'];
  28.   ANSIParChrs = ['0'..'9','?'];
  29.  
  30.   ESC = #27;
  31.  
  32.   ISO_6429  : ARRAY[0..7] OF Byte = (0,4,2,6,1,5,3,7);
  33.   ISO_6429c : ARRAY[0..7] OF Char = ('0','4','2','6','1','5','3','7');
  34.  
  35.   { AVATAR Constants }
  36.  
  37.   AVATARClrScrColor : Byte = 3;
  38.  
  39.   AVTBlack     = ^V^A#0;  AVTDarkGray     = ^V^A#8;
  40.   AVTBlue      = ^V^A#1;  AVTLightBlue    = ^V^A#9;
  41.   AVTGreen     = ^V^A#2;  AVTLightGreen   = ^V^A#10;
  42.   AVTCyan      = ^V^A#3;  AVTLightCyan    = ^V^A#11;
  43.   AVTRed       = ^V^A#4;  AVTLightRed     = ^V^A#12;
  44.   AVTMagenta   = ^V^A#5;  AVTLightMagenta = ^V^A#13;
  45.   AVTBrown     = ^V^A#6;  AVTYellow       = ^V^A#14;
  46.   AVTLightGray = ^V^A#7;  AVTWhite        = ^V^A#15;
  47.  
  48.   { CGA Constants }
  49.  
  50.   CGA_Size40   = $00;  { -------0 }   { CGA Control Register }
  51.   CGA_Size80   = $01;  { -------1 }   { Port $3D8            }
  52.   CGA_Txt      = $00;  { ------0- }
  53.   CGA_Gfx      = $02;  { ------1- }
  54.   CGA_Color    = $00;  { -----0-- }
  55.   CGA_Mono     = $04;  { -----1-- }
  56.   CGA_HighOff  = $00;  { ----0--- }
  57.   CGA_HighOn   = $08;  { ----1--- }
  58.   CGA_LoRes    = $00;  { ---0---- }
  59.   CGA_HiRes    = $10;  { ---1---- }
  60.   CGA_BlinkOff = $00;  { --0----- }
  61.   CGA_BlinkOn  = $20;  { --1----- }
  62.  
  63.   { Color Constants }
  64.  
  65.   Black     = 0;   DarkGray     = 8;    BlackBG     = $00;
  66.   Blue      = 1;   LightBlue    = 9;    BlueBG      = $10;
  67.   Green     = 2;   LightGreen   = 10;   GreenBG     = $20;
  68.   Cyan      = 3;   LightCyan    = 11;   CyanBG      = $30;
  69.   Red       = 4;   LightRed     = 12;   RedBG       = $40;
  70.   Magenta   = 5;   LightMagenta = 13;   MagentaBG   = $50;
  71.   Brown     = 6;   Yellow       = 14;   BrownBG     = $60;
  72.   LightGray = 7;   White        = 15;   LightGrayBG = $70;
  73.  
  74.   Blink = 128;
  75.  
  76.   { Video Segments }
  77.  
  78.   CSeg = $B800;   { Video segment for color monitors          }
  79.   MSeg = $B000;   { Video segment for monochrome monitors     }
  80.   VSeg = $A000;   { Video segment for VGA systems in mode 13h }
  81.  
  82.   { Pel/Pixel Ports }
  83.  
  84.   PelAddrR  = $3C7;
  85.   PelAddrW  = $3C8;
  86.   PelData   = $3C9;
  87.  
  88.   { PrintScreenStatus Constants }
  89.  
  90.   PrtSc_NotActive  = $00;
  91.   PrtSc_InProgress = $01;
  92.   PrtSc_Error      = $FF;
  93.  
  94.   { TextGfx Constants }
  95.  
  96.   _ASCII  = 0; { -------- }
  97.   _ANSI   = 1; { -------1 }
  98.   _AVATAR = 2; { ------1- }
  99.  
  100.  
  101. TYPE
  102.  
  103.   t80x25 = ARRAY[0..4000] OF Byte;
  104.  
  105.   p80x25 = ^t80x25;
  106.  
  107.   tCharSpec = RECORD
  108.     Ch : Char;  { Character }
  109.     At : Byte;  { Attribute }
  110.     END;
  111.  
  112.   pCharSpec = ^tCharSpec;
  113.  
  114.   tRGB = RECORD
  115.     R : Byte;   { Red       }
  116.     G : Byte;   { Green     }
  117.     B : Byte;   { Blue      }
  118.     END;
  119.  
  120.   pRGB = ^tRGB;
  121.  
  122.   tPalette64 = ARRAY[0..63] OF tRGB;
  123.  
  124.   pPalette64 = ^tPalette64;
  125.  
  126.   tPalette256 = ARRAY[0..255] OF tRGB;
  127.  
  128.   pPalette256 = ^tPalette256;
  129.  
  130. CONST
  131.   Faded       : Boolean = False;
  132.   ScreenPtr   : Pointer = NIL;
  133.  
  134. VAR
  135.   OriginalVideoMode : Byte;
  136.   PrintScreenStatus : Byte ABSOLUTE $0050:$0000;
  137.  
  138. VAR
  139.  
  140.   ATI_Revision : Byte ABSOLUTE $C000:$0043;
  141.     { 31h = 18800                                                           }
  142.     { 32h = 18800-1                                                         }
  143.     { 33h = 18800-2                                                         }
  144.     { 34h = 18800-4                                                         }
  145.     { 35h = 18800-5                                                         }
  146.     { 62h = 68800AX (Mach32)                                                }
  147.  
  148.   ATI_Adapter  : Word ABSOLUTE $C000:$0040;
  149.     { "22" = EGA Wonder                                                     }
  150.     { "31" = VGA Wonder                                                     }
  151.     { "32" = EGA Wonder800+                                                 }
  152.  
  153.   ATI_Features : Byte ABSOLUTE $C000:$0042;
  154.     { bit 1 = mouse port present                                            }
  155.     { bit 4 = programmable video clock                                      }
  156.  
  157.   ATI_FeaturesPlus : Byte ABSOLUTE $C000:$0044;
  158.     { Contains additional flags if chipset > 30h.                           }
  159.     { bit 0 = 70 Hz non-interlaced display                                  }
  160.     { bit 1 = Korean (double-type) characters                               }
  161.     { bit 2 = 45 Mhz memory clock rather than 40 Mhz                        }
  162.     { bit 3 = zero wait states                                              }
  163.     { bit 4 = paged ROMs                                                    }
  164.     { bit 6 = no 8514/A monitor support                                     }
  165.     { bit 7 = HiColor DAC                                                   }
  166.  
  167.  
  168. FUNCTION ANSI_Color(CONST P:ARRAY OF Byte; From:Byte):Byte;
  169.   { Calculates the new text color based on the parameters from an ANSI      }
  170.   { color sequence.  P[0] contains the number of parameters in the array.   }
  171.  
  172.  
  173. FUNCTION ANSI_SYS_Driver:Boolean;
  174.   { Returns TRUE if ANSI.SYS is loaded on the local machine.                }
  175.  
  176.  
  177. PROCEDURE BLoad80x25(p:p80x25);
  178. PROCEDURE BSave80x25(p:p80x25);
  179.   { These two procedures are similar to the BLOAD and BSAVE statements in   }
  180.   { BASIC.  The first procedure copies the contents of the 80 x 25 text     }
  181.   { screen into a buffer.  The second procedure copies the contents from a  }
  182.   { buffer to the video screen.  No range checking or memory allocation is  }
  183.   { performed.                                                              }
  184.  
  185.  
  186. PROCEDURE CursorOff;
  187. PROCEDURE CursorOn;
  188.   { These two procedures control the visibility of the cursor without       }
  189.   { affecting its attributes (i.e. size).  Very old BIOSs are supported.    }
  190.  
  191.  
  192. FUNCTION DetectAheadAdapter    : Boolean;
  193. FUNCTION DetectATIAdapter      : Boolean;
  194. FUNCTION DetectGenoaAdapter    : Boolean;
  195. FUNCTION DetectOakTechChipSet  : Boolean;
  196. FUNCTION DetectParadiseAdapter : Boolean;
  197.   { These functions attempt to detect a video card by searching for its     }
  198.   { particular signature.                                                   }
  199.  
  200.  
  201. FUNCTION DoorSys_2_Graphics(p:pChar):Byte;
  202.   {
  203.   PURPOSE  : Converts a DOOR.SYS graphics string to the system used by
  204.              this unit.
  205.  
  206.   NOTES    : NG  =  0  (_ASCII)
  207.              GR  =  1  (_ANSI)
  208.   }
  209.  
  210.  
  211. FUNCTION EGA_BIOS:Boolean;
  212.   { Detects the presense of an EGA-compatible BIOS.                         }
  213.  
  214.  
  215. PROCEDURE FadeIn(d:Word);
  216. PROCEDURE FadeOut(d:Word);
  217.   { These two procedures cycle the color palette to produce a smooth fading }
  218.   { affect.  An EGA/VGA graphics card is required.                          }
  219.  
  220.  
  221. FUNCTION GenoaAdapter:Byte;
  222.   { Returns the Genoa model:                                                }
  223.   {   00h = Genoa 6200/6300                                                 }
  224.   {   11h = Genoa 6400/6600                                                 }
  225.   {   22h = Genoa 6100                                                      }
  226.   {   33h = Genoa 5100/5200                                                 }
  227.   {   55h = Genoa 5300/5400